/************************************************************************

								Heroes IV
					  Copyright 2000, The 3DO Company

	------------------------------------------------------------------
  						 adv_object_image_visitor.h

	$Header: /heroes4/adv_object_image_visitor.h $

	$NoKeywords: $

 ************************************************************************/

#if !defined( ADV_OBJECT_IMAGE_VISITOR_H_INCLUDED )
#define ADV_OBJECT_IMAGE_VISITOR_H_INCLUDED

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class t_overlay_adv_object_image_24;
class t_underlay_adv_object_image_24;
class t_overlay_adv_object_image;
class t_underlay_adv_object_image;

// ------------------------------------------------------------------------------
// t_adv_object_image_visitor_base class template
// ------------------------------------------------------------------------------

template < typename t_overlay_image, typename t_underlay_image >
class t_adv_object_image_visitor_base
{
public:
	// Destructor
	virtual ~t_adv_object_image_visitor_base();

	// Member functions
	virtual void visit( t_overlay_image & image );
	virtual void visit( t_overlay_image const & image );
	virtual void visit( t_underlay_image & image );
	virtual void visit( t_underlay_image const & image );
};

template < typename t_overlay_image, typename t_underlay_image >
t_adv_object_image_visitor_base< t_overlay_image, t_underlay_image >::~t_adv_object_image_visitor_base()
{
}

template < typename t_overlay_image, typename t_underlay_image >
void t_adv_object_image_visitor_base< t_overlay_image, t_underlay_image >::visit( t_overlay_image & image )
{
}

template < typename t_overlay_image, typename t_underlay_image >
void t_adv_object_image_visitor_base< t_overlay_image, t_underlay_image >::visit( t_overlay_image const & image )
{
}

template < typename t_overlay_image, typename t_underlay_image >
void t_adv_object_image_visitor_base< t_overlay_image, t_underlay_image >::visit( t_underlay_image & image )
{
}

template < typename t_overlay_image, typename t_underlay_image >
void t_adv_object_image_visitor_base< t_overlay_image, t_underlay_image >::visit( t_underlay_image const & image )
{
}

// ------------------------------------------------------------------------------
// t_adv_object_image_visitor_24 class
// ------------------------------------------------------------------------------

class t_adv_object_image_visitor_24 : public t_adv_object_image_visitor_base< t_overlay_adv_object_image_24, t_underlay_adv_object_image_24 >
{
};

// ------------------------------------------------------------------------------
// t_adv_object_image_visitor class
// ------------------------------------------------------------------------------

class t_adv_object_image_visitor : public t_adv_object_image_visitor_base< t_overlay_adv_object_image, t_underlay_adv_object_image >
{
};

#endif // !defined( ADV_OBJECT_IMAGE_VISITOR_H_INCLUDED )
